import axios from 'axios';
import router from '../router';
import {ElMessage} from 'element-plus'

export default function (options) {
    options.headers = Object.assign(
        {Authorization: localStorage.getItem('token')},
        options.headers || {}
    );
    return axios(options)
        .then(({status, data, statusText}) => {
            if (status == 200) {
                console.log(data);
                return data;
            } else {
                ElMessage.error('访问服务器出现异常');
                // 非200状态码时，主动抛出错误（进入catch）
                return Promise.reject(new Error('HTTP请求失败'));
            }
        })
        .then(({code, data, msg}) => {
            switch (code) {
                case 200:
                    if (msg)
                        ElMessage({
                            message: msg,
                            type: 'success',
                        });
                    return data;
                case 401:
                    if (msg) msg = '认证失败，稍后跳转到登录页面';
                    ElMessage({
                        message: msg,
                        type: 'warning',
                    });
                    setTimeout(function () {
                        sessionStorage.removeItem('token');
                        router.push("/login");
                    }, 1800);
                    // 401时抛出错误，避免后续逻辑执行
                    return Promise.reject(new Error('认证失败'));
                default:
                    // 关键：code≠200时，抛出错误（转为rejected状态）
                    const errorMsg = msg || '操作失败';
                    ElMessage.error(errorMsg);
                    return Promise.reject(new Error(errorMsg));
            }
        }).catch(e => {
            // 仅捕获未处理的异常，避免重复提示
            if (!e.message.includes('HTTP请求失败') && !e.message.includes('认证失败') && !e.message) {
                ElMessage.error('系统出现异常,请联系管理员');
            }
            // 继续抛出错误，让前端catch能捕获
            return Promise.reject(e);
        });
}